#include <iostream>
#include <sstream>
#include <string>
#include <memory>
#include <jsoncpp/json/json.h>

// 实现数据的序列化
bool serialize(const Json::Value &val, std::string &body){
    std::stringstream ss;
    // 先实例化一个工厂类S对象
    Json::StreamWriterBuilder swb;
    //通过工厂类对象生产派生类对象
    //Json::StreamWriter *sw = swb.newStreamWriter();
    std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());
    int ret = sw->write(val,&ss);
    if(ret != 0){
        std::cout << "json serialize failed!" << std::endl;
        return  false;
    }else{ 
        body = ss.str();
        return true;
    }
}
// 在 R"(...)" 中，... 是原始字符串的内容，其中的字符会被原封不动地存储在 str 中，不需要使用转义字符。

bool unserialize(const std::string &body, Json::Value &val){
    // 实例化工厂对象
    Json::CharReaderBuilder crb;
    // 生产派生类对象
    std::unique_ptr<Json::CharReader> cr(crb.newCharReader());
    std::string errs;
    //bool ret = cr->parse(body.begin(),body.end(),&val,&errs);
    bool ret = cr->parse(body.c_str(),body.c_str()+body.size(),&val,&errs);
    if(!ret){
        std::cout << "json unserialize failed !" << errs <<std::endl;
        return false;
    }else{
        return true;
    }
}